Documentation (fr) pour Rapid-Q par d-evolution (c)2004-2008 Appendix A: QTBUTTONL


Composante QTBUTTONL

Version actuelle : 2.0 preRelease
MàJ : 23/01/2008
Créé pour Windows uniquement

  QTButtonL est un contrôle hérité de QButton, d'où Q(True)Button(Lite), avec la possibilité de placer une enjolivure (un skin) en fond. Pour ceux qui ont connus la précédente version, sachez que cette version diffère largement de l'ancien QTButton, si une procédure pour actualiser tous changements était nécessaire (le plus gros étant fait en interne, l'utilisateur ne s'en rendait pas compte), ce qui alourdissait énormément le code final, ce n'est plus le cas de cette nouvelle mouture, en plus d'utiliser un sous-classement pour dessiner le bouton à la volé au lieu de conserver l'image dans la propriété BMP du bouton. Le changement de dimension, titre, ou de couleur de la police est appliquée sans aucune autre interaction, sauf pour certaines exceptions.

Cette nouvelle version peut aussi bien remplacer QCoolBtn et QOvalBtn, du fait qu'elle ajoute le support de la transparence, le regroupement de bouton et peut tout aussi bien agir comme une case à cocher ou un bouton radio.

QTButtonL se veut plus léger que QTButton et compatible avec l'AddOns qui lui supporte les tableaux n'étant pas un dérivé QButton, contrairement au version objet QTButtonL ou QTButton (ancienne version).

Pour commencer, créer une ressource "btn_BMP" contenant l'image bitmap qui sera l'enjolivure ou skin de tous les QTButtons. Ce dernier est optionnel, si vous prévoyez combiner le Style QTButton avec celui de XP vous pouvez passer outre cette étape.

Exemple : $REsource btn_BMP As "_RES\Boutons.bmp"
*(remplacer la partie en vert, désignant le chemin de la ressource bitmap à utiliser, le reste ne doit pas être modifié)



Original
Nouveau
Amélioré
             

Documentation française (MàJ: 30/01/2008)
$REsource btn_BMP As "_RES\Boutons.bmp"

Commencez par créer une image bitmap contenant les images, alignées horizontalement, représentant vos boutons.

Ordre des images
1 2 3 4 5
Normal Désactivé Enfoncé / Coché Survolé   (Nouveau!) Sélectionné   (Nouveau!)
voici un exemple de bitmap comportant 3 images :
Exemple :: Boutons3.bmp
voici un exemple de bitmap comportant 4 images :
Exemple :: Boutons.bmp
voici un exemple de bitmap comportant 5 images :
Exemple :: Boutons5.bmp

QTButton supporte jusqu'à cinq effets, mais vous pouvez n'intégrer que le nombre qui vous plaît, tant qu'ils respectent l'ordre d'affichage. Ainsi vous pouvez n'avoir qu'un seul effet, deux effets, ainsi de suite.

Propriétés de QTButtonL <inverser la visibilité de tous les champs>
Champs Type L/E Défaut





+ Align ENTIER LE alNone

Align détermine la façon dont le contrôle s'aligne à l'intérieur de son contrôle parent.
0 = alNone
1 = alTop
2 = alBottom
3 = alLeft
4 = alRight
5 = alClient





-- Étend à l'espace client
valeur 0 à 5
+ AllowAllUp ENTIER LE Faux

AllowAllUp spécifie si tous les boutons d'un même groupe peuvent être désélectionnés en même temps.
valeur Vrai ou Faux
+ AutoCheck ENTIER LE Faux

Agit comme une case à cocher si Vrai.
valeur Vrai ou Faux
+ AutoGroup ENTIER LE Faux

Agit comme un bouton radio si Vrai. Tous les boutons d'un même contrôle parent, ayant cette propriété à Vrai seront affectés.
valeur Vrai ou Faux
+ BMP CHAÎNE DE TEXTE ou BMP LE


BMP/BMPHandle est l'icône qui sera affichée à côté du texte sur le bouton.
Utiliser BMP pour assigner un nouveau fichier bitmap, ou pour utiliser BMP dans une déclaration de dessin.
Exemples:
DIM bouton AS QBUTTON
bouton.BMP = "NomDuFichier.bmp"
Détails:
Plusieurs images peuvent être contenues dans un seul bitmap, mais elles doivent être de même taille et l'une à côté de l'autre horizontalement.
Le "premier" bitmap apparaît lorsque le bouton n'a aucune interaction.
Le "second" bitmap apparaît lorsque le bouton est désactivé.
Le "troisième" bitmap apparaît lorsque le bouton est enfoncé (cliqué).
Le "quatrième" bitmap apparaît lorsque le bouton est survolé.
Vous devez spécifier à Rapid-Q le nombre d'image contenue dans votre bitmap en assignant le nombre à NumBMPs.
+ BMPHandle RESSOURCE BMP --


Assigne une ressource BMP qui apparaîtra sur le bouton.
Exemple:
$RESOURCE jeu_BMP AS "jeu.bmp"
DIM bouton AS QTBUTTON
bouton.bmpHandle = jeu_BMP
Détails:
Voir BMP
+ BtnType ENTIER LE xpbt_Push

Définit l'apparence du bouton sous type de bouton sous XP, par défaut le bouton a l'apparence d'un bouton classique sous XP;
  0 = xpbt_Push
  1 = xpbt_ToolBar
  2 = xpbt_Tab
  3 = xpbt_ToolBarSplit
  4 = xpbt_ScrollBarVert
  5 = xpbt_ScrollBarHorz
  6 = xpbt_TrackBarVert
  7 = xpbt_TrackBarHorz
  8 = xpbt_Radio
  9 = xpbt_CheckBox
10 = xpbt_ComboBox
11 = xpbt_ToolTipClose
12 = xpbt_Spin_Up
13 = xpbt_Spin_Down
14 = xpbt_Spin_Left
15 = xpbt_Spin_Rigth 
-- Bouton  (défaut)
-- Bouton de barre d'outil
-- Onglet
   




-- Bouton Radio (support partiel)
-- Case à cocher (support partiel)






valeur de 0 à 15
+ Cancel ENTIER LE Faux

Si Cancel est Vrai, l'événement OnClique attaché au bouton est exécuté lorsque l'utilisateur appuie sur la touche Échappe.
valeur Vrai ou Faux
+ Caption CHAÎNE DE TEXTE LE


Caption spécifie le texte qui apparaît sur le bouton. Pour souligner une lettre, inclure (&) devant la lettre.

Multi-Lignes
Pour créer un effet multi-lignes, ajoutez chr$(10) ou \n entre les mots où vous voulez créer l'effet.
Exemple :
.Caption = "Ceci est " +chr$(10) +_
           "un bouton " +chr$(10) +_
           "multi-lignes."
+ Color ENTIER LE couleur du parent


Color définie la couleur d'arrière-plan du bouton et non la couleur du bouton.
+ Checked ENTIER E Faux

Checked définie si l'état du bouton est sélectionné (enfoncé) ou normal.
valeur Vrai ou Faux
Note:Pour connaître l'état sélectionné (coché) actuel du bouton, utiliser QTBtn.IsCheckedByName(NomDuBouton) ou QTBtn.IsChecked(InstanceDuBouton) puisque Checked ne peut pas récupérer l'état actuel de la sélection.
Cursor ENTIER LE crDefault
+ Default ENTIER LE Faux

Si Default est Vrai, l'événement OnClique attaché au bouton est exécuté lorsque l'utilisateur appuie sur la touche Entrée.
valeur Vrai ou Faux
Enabled ENTIER LE Vrai
Font QFONT E

Handle ENTIER L

Height ENTIER LE 25
+ HideFocus ENTIER LE Faux
HideFocus définie si le rectangle de sélection doit être dessiné sur le bouton.
valeur Vrai ou Faux
+ Hint CHAÎNE DE TEXTE LE

Hint définie le texte qui apparaît dans l'info-bulle lorsque le curseur survole un bouton.

Personnaliser l'info-bulle :
<bc=ValeurdeCouleur/> Couleur de l'info-bulle
<fc=ValeurdeCouleur/> Couleur du texte de l'info-bulle
<i=IndexDeLIcône/> Index de l'icône (TTI_NONE, TTI_INFO, TTI_WARNING, TTI_ERROR)
<s=style/> Style d'info-bulle (ToolTipBalloon, ToolTipStandard)
<c/> Centre l'info-bulle en rapport à son parent
<margin=EnPixel/> Marge intérieur
<delay=EnMiliSeconde/> Délais avant d'afficher l'info-bulle
<duration=EnMiliSeconde/> Durée d'affichage de l'info-bulle
<opacity=DegreeDOpacite/> Degré d'opacité (? ne fonctionne pas sous XP ?)
<width=EnPixel/> Largeur de l'info-bulle
<tl=TitreDeLInfoBulle/> Titre de l'info-bulle
<img=Image: Size=X,Y,W,H/> Image à intégrer (peut être un fichier existant ou l'instance d'un bitmap), "Size" contient les coordonnées et les dimensions de l'image
Astuce: utiliser chr$(0) pour séparer le texte du formatage, permet la compatibilité avec l'ancienne info-bulle
Exemple :
  Button1.Hint = "Button1 classe::QTButtonL" +rqSL +"Ma nouvelle info-bulle" +rqNullChr + _
         "<i=TTI_INFO/><s=Balloon><bc=#FFFFFF/><fc=#0/><tl=Détail:/>"

  Button1.ShowHint = 2 ' Active la nouvelle info-bulle

Texte de l'info-bulle
Séparateur utiliser pour séparer le nouveau formatage
Formatage de l'info-bulle
+ HotTrackEnabled ENTIER LE Vrai
Applique un effet survole au bouton, en plus de retourner les messages MouseEnter et MouseLeave à l'aide de QTBtn.MouseEnter et QTBtn.MouseLeave.
valeur Vrai ou Faux
+ Icon.FileName CHAÎNE DE TEXTE LE
Le chemin du fichier icône (.ico) qui remplacera BMP/BMPHandle.
+ Icon.Handle ENTIER LE
Contient l'instance d'une icône chargée par Icon.FileName et sera effacée après utilisation.
Peut aussi contenir l'instance d'une icône récupérée à l'aide d'une autre méthode.
Utilisé pour afficher correctement les icônes 32bit (XP).
+ Icon.Index ENTIER LE
Contient l'index de l'icône à afficher.
+ Icon.Count ENTIER LE
Récupère le nombre d'icône contenue dans le fichier icône.
+ Icon.Width ENTIER LE 32
Définie la largeur en pixel qui sera utilisée pour dessiner l'icône.
+ Icon.Small ENTIER LE Faux
Définie la taille de l'icône à récupérer dans le fichier icône. Vrai pour Petite ou Faux pour Grande.
valeur Vrai ou Faux
Kind ENTIER LE bkCustom
+ KindBMPDisabled ENTIER LE Faux
Affiche ou non l'icône que la propriété Kind applique à un bouton.
valeur Vrai ou Faux
+ Layout ENTIER LE blBMPLeft

Layout détermine où sera affiché l'image bitmap sur le bouton.
0 = balBMPLeft
-- l'image apparaît à gauche du texte (blBMPLeft)
1 = balBMPRight -- l'image apparaît à droite du texte (blBMPRight)
2 = balBMPTop -- l'image apparaît au dessus du texte (blBMPTop)
3 = balBMPBottom -- l'image apparaît sous le texte (blBMPBottom)
4 = balBMPLeftFixed -- (Nouveau) l'image apparaît à gauche du texte aux coordonnées prédéfinies
5 = balBMPRightFixed -- (Nouveau) l'image apparaît à droite du texte aux coordonnées prédéfinies
valeur 0 à 5
Left ENTIER LE 0
ModalResult ENTIER LE mrNone
+ NumBMPs ENTIER LE 1

NumBMPs détermine le nombre d'image inclut dans l'image icône qui sera placée juste à côté du texte du bouton.
valeur 1 à 4
Note:Ce nombre est limité à 4 (limitation RapidQ).
Parent QFORM/QPANEL/QTABCONTROL LE
PopupMenu QPOPUPMENU E
+ PushFXDisabled ENTIER LE Faux

Élimine l'effet enfoncé de l'image et du texte, lorsque l'on clique sur le bouton.
valeur Vrai ou Faux
+ ShowHint ENTIER LE Faux

Ce dernier permet d'afficher l'info-bulle, (Vrai) style classique (RapidQ) ou (2) style personnalisé...
(Voir Hint pour connaître les détails de la personnalisation de l'info-bulle)
valeur QTBtn.ShowHint.Extended (2), Vrai ou Faux
+ Spacing ENTIER -- 4

Détermine l'espace, en pixels, séparant l'image du texte.
+ StyleEnabled ENTIER LE Vrai

Active l'enjolivure (skin), le bouton sera dessiné en utilisant l'image contenue dans la ressource "btn_BMP", sauf si XPThemeEnabled est Vrai, le thème du bureau sera utilisé.
valeur Vrai ou Faux
TabOrder ENTIER LE
Tag ENTIER LE
Top ENTIER LE 0
+ Transparent ENTIER LE Faux

Dessine le bouton en récupérant ce qui se trouve dessous, donnant ainsi un effet de transparence au bouton. Utile dans le cas de boutons aux formes non conventionnelles.
valeur Vrai ou Faux
Width ENTIER LE 75
+ XPThemeEnabled ENTIER LE Vrai

Dessine le bouton en utilisant le Thème de Bureau sous XP en dépit de l'enjolivure choisie.
valeur 2, Vrai ou Faux
Note:Placer la valeur 2, désactive l'enjolivure laissant Windows dessiner le bouton.
Exemple: permet d'utiliser le thème sous XP... vous aurez besoin d'un fichier Manifest!
Visible ENTIER LE Vrai
Méthodes de QTButtonL
Méthode Type Description Arguments





StartDrag SUB Permet de déplacer le bouton 0
RePaint SUB Active le mode QTButton du bouton lors de la première exécution ou met à jour certains changements. 0
Événements de QTButtonL
Événement Type Survient lorsque... Arguments





OnClick VOID L'utilisateur a cliqué sur le bouton 0
OnKeyDown SUB (Key AS Word, Shift AS INTEGER) Une touche est maintenue enfoncée 2
OnKeyPress SUB (Key AS BYTE) L'utilisateur appuie sur une touche 1
OnKeyUp SUB (Key AS Word, Shift AS INTEGER) L'utilisateur relâche une touche 2
OnMouseDown SUB (Button%, X%, Y%, Shift%) Le bouton de la souris est maintenu enfoncé 4
OnMouseMove SUB (X%, Y%, Shift%) La souris se déplace sur le bouton
(Pour gérer l'entrée et la sortie voir QTBtn.MouseEnter et QTBtn.MouseLeave)
3
OnMouseUp SUB (Button%, X%, Y%, Shift%) Le bouton de la souris est relâché 4

Autres options de QTButtonL
Options générales affectant tous les boutons.
btn_BMP
Ressource BMP $REsource btn_BMP As "_RES\bitmap.bmp"
Ressource par défaut pour tous les QTButton, contenant l'image du bouton. Il est possible de créer d'autres ressources contenant d'autres images de bouton, pour ce, voir l'exemple plus haut.
QTBtn.isXP Entier Utilisé en interne par QTButton, QTBtn.isXP identifie si la version de Windows est XP ou supérieure.
QTBtn.IsAppThemed Entier Utilisé en interne par QTButton, QTBtn.IsAppThemed identifie si une application tournant sous Windows XP, est correctement thèmée (Manifest présent et thème activé).
QTBtn.AutoStyle Entier Doit être inséré en début de code. Si QTBtn.AutoStyle est Vrai, tous les boutons de la même fenêtre auront le Style QTButton activé.

Autres méthodes
Méthode Type Description Arguments





QTBtn.CheckXPManifest FUNCTION (Relancer) Vérifie si un fichier Manifest doit être créé et en crée un au besoin...
Si Relaunch = Vrai, l'application est relancée si un fichier Manifest est créé, évitant de devoir la relancer manuellement pour que le thème de Windows XP soit utilisé. Utile lors d'une première compilation/exécution!
Si le thème est activé et qu'un Manifest valide est présent, QTBtn.CheckXPManifest donne la valeur Vrai à QTBtn.IsAppThemed.
Note:Vérifie aussi la présence de la ressource RT_MANIFEST intégrée à l'application.
Les arguments de la ligne de commande sont aussi retournés lorsque l'application est
relancée, de façon à que ce soit le plus transparent possible!
1
QTBtn.IsChecked SUB (Instance du bouton) Récupère l'état sélectionné (coché) de l'instance spécifié. (Seul QTButton) 1
QTBtn.IsCheckedByName SUB (Nom du bouton) Récupère l'état sélectionné (coché) du bouton spécifié. (Seul QTButton) 1
do_XPizeBtn FUNCTION (Nom du bouton) Désactive le mode ownerdraw de RapidQ et laisse Windows dessiner le bouton. (QButton et Dérivé) 1
QTBtn.MouseEnter SUB (Instance du bouton) Pseudo événement MouseEnter (QButton et Dérivé)
Lorsque le curseur entre sur le bouton cet événement est appelé.
hWnd contient l'instance du bouton.
1
QTBtn.MouseLeave SUB (Instance du bouton) Pseudo événement MouseLeave (QButton et Dérivé)
Lorsque le curseur quitte le bouton cet événement est appelé.
hWnd contient l'instance du bouton.
1

Exemples pour QTButtonL (Copier et coller dans un nouveau projet)
Exemple 1 : (Bouton glissant)
'-- Un bouton glissant
$REsource btn_BMP As "Boutons.bmp"       ' -- Remplacez-le par une image que vous possèdez
'$REsource btn_BMP As "Boutons_Plat.bmp" ' -- Utiliser celui-ci pour créer un bouton plat

$Include "QTButton2_LiteA"               ' -- Corrigez le chemin si nécessaire

Dim Form   As QForm
Dim Button As QTButton

Sub MouseDown
    Button.StartDrag
    ShowMessage STR$(Button.Left) +"," +STR$(Button.Top)
End Sub

Button.Parent      = Form
Button.Caption     = "Déplace-moi"
Button.OnMouseDown = MouseDown
Button.RePaint

Form.ShowModal
Exemple 2 :
$REsource btn_BMP   As "Boutons.bmp"
$REsource fond1_BMP As "QTButtonv2_Lite_Demo_FondTest.bmp"
$REsource fond2_BMP As "QTButtonv2_Lite_Demo_FondTest2.bmp"

Declare Sub OnLoad
Declare Sub btnClick(Me As QButton)

' Nouvelle version de QTButton utilisant le correctif pour avoir plusieurs WinProc
$Include "QTButton2_LiteA.inc"

QTBtn.CheckXPManifest(True)

Create Form As QFORM
    Caption      = "QTButtonLite"
    ClientWidth  = 161
    ClientHeight = 269
    Center
    'Color        = &HFFFFFF
    Create Button1 As QTBUTTONL
        BtnType       = xpbt_ToolBar ' Le type de bouton (Seulement si XPThemeEnabled = True)
        Caption       = "Thème XP"
        Height        = 45: Width = 115
        Left          = 25: Top = 12
        AutoGroup     = True ' Imite un bouton radio
        HideFocus     = True ' Masque le rectangle de sélection
        Hint          = "Button1 classe::QTButtonL" +rqSL +"Info-bulle balloon" +rqNullChr + _
                        "<i=TTI_NONE/><s=balloon/><bc=#FFFFFF/><fc=#0/><tl=Détail:/>"
        ShowHint      = QTBtn.ShowHint.Extended
        Font.Color    = &HFF00FF
        Icon.FileName = "QTButtonv2_Lite_Demo_Icon.ico"
        'Icon.Small    = True
        Icon.Width    = 32
        Icon.Index    = 0
        Transparent   = True
        RePaint ' Applique les changements
        OnClick       = btnClick
    End Create
    Create Button2 As QTBUTTONL
        Caption        = "Style et " +rqSL +"Auto-Case"
        Left           = 25: Top = 62
        Width          = 115: Height = 45
        BMP            = "BigGrin.bmp"
        XPThemeEnabled = False
        'AutoCheck      = True
        AutoGroup      = True ' Imite un bouton radio
        'HideFocus      = True
        Hint           = "Button2 classe::QTButtonL" +rqSL +"Info-bulle balloon centrée" +rqNullChr + _
                         "<s=Balloon/><opacity=127/><delay=500/><duration=5000/><c/><i=TTI_INFO/><bc=#FFFFFF/><fc=#0/><tl=Détail:/>"
        ShowHint       = QTBtn.ShowHint.Extended
        RePaint
        OnClick        = btnClick
    End Create
    Create Button3 As QTBUTTONL
        Kind        = 1
        Enabled     = False
        BtnType     = xpbt_ToolBar
        Caption     = "Désactivé"
        Left        = 25: Top = 112
        Width       = 115: Height = 45
        HideFocus   = True
        Hint        = "Button3 classe::QTButtonL" +rqSL +"Info-bulle classique avec titre" +rqNullChr + _
                      "<i=TTI_INFO/><bc=#FFFFFF/><fc=#0/><tl=Détail:/>"
        ShowHint    = QTBtn.ShowHint.Extended
        Transparent = True
        RePaint
        OnClick     = btnClick
    End Create
    Create Button4 As QBUTTON
        Caption     = "QTButtonL"
        Left        = 25: Top = 162
        Width       = 115: Height = 45
        BMP         = "BigGrin.bmp"
        Hint        = "Button4 classe::QButton" +rqSL +"Info-bulle classique avec titre" +rqNullChr + _
                      "<i=TTI_INFO/><bc=#FFFFFF/><fc=#0/><tl=Détail:/>"
        OnClick     = btnClick
    End Create
    Create Button5 As QTBUTTONL
        Caption     = "Thème XP et " +rqSL +"Auto-Case"
        Left        = 25: Top = 212
        Width       = 115: Height = 45
        Layout      = balBMPRightFixed
        BMP         = "BigGrin.bmp"
        Hint        = "Button5 classe::QTButtonL" +rqSL +"Info-bulle classique avec titre" +rqNullChr + _
                      "<i=TTI_INFO/><bc=#FFFFFF/><fc=#0/><tl=Détail:/>"
        'HideFocus   = True
        ShowHint    = QTBtn.ShowHint.Extended
        'Font.Color  = &H002D7
        AutoCheck   = True ' Imite une case à cochée
        Transparent = True
        RePaint
        OnClick     = btnClick
    End Create
    ' L'image peut aussi être peinte directement sur la fenêtre
    Create Image1 As QIMAGE
        BMPHandle = fond1_BMP
        Stretch   = True
        Width     = Form.ClientWidth
        Height    = Form.ClientHeight
    End Create
    OnShow = OnLoad
End Create

Dim btnParam As QTBtnParam
    btnParam = QTBtn.defParams

DefInt bgSwitch = False

Sub btnClick
    Select Case Me.Handle
        Case Button1.Handle ' Fond no1
             bgSwitch         = False
             Image1.BMPHandle = fond1_BMP
        Case Button2.Handle ' Fond no2
             bgSwitch         = True
             Image1.BMPHandle = fond2_BMP
        Case Button5.Handle, Button2.Handle
             If Tally(Me.Caption, rqSL +"Coché") Then
                Me.Font.Color = clBtnText
                Me.Caption    = LEFT$(Me.Caption, Len(Me.Caption) -Len(rqSL +"Coché"))
             Else
                Me.Font.Color = &H002D7
                Me.Caption    = Me.Caption +(rqSL +"Coché")
             End If
        Case Else
    End Select
End Sub
Sub QTBtn.MouseEnter(hWnd As Long)
    Select Case hWnd
        Case Button2.Handle
             Button2.Font.Color = clHilight
        Case Button5.Handle
             Button5.Font.Color = clHilight
        Case Else
    End Select
End Sub
Sub QTBtn.MouseLeave(hWnd As Long)

    Select Case hWnd
        Case Button2.Handle
             Button2.Font.Color = IIf(QTBtn.IsChecked(hWnd), &H002D7, clBtnText)
        Case Button5.Handle
             Button5.Font.Color = IIf(QTBtn.IsCheckedByName(Button5), &H002D7, clBtnText)
    Case Else
    End Select
End Sub

Sub OnLoad
    TTIP.AttachToolTip(Button4.Handle, Button4.Hint)
End Sub

Form.ShowModal
TTIP.DetachToolTip(Button4.Handle)
Application.Terminate

Prev Component Contents Next Component